var deviceMotionHandler = (function(){
    
    var SHAKE_THRESHOLD = 400;
    var last_update = 0;
    var x, y, z, last_x, last_y, last_z;
     
    return function(eventData,callback,shakeCount) {

        var _shakeCount = shakeCount || SHAKE_THRESHOLD;

        var acceleration = eventData.accelerationIncludingGravity;

        var curTime = new Date().getTime();

        if ((curTime - last_update ) > 100) {

            var diffTime = curTime -last_update;
            last_update = curTime;

            x = acceleration.x;
            y = acceleration.y;
            z = acceleration.z;

            var speed = Math.abs(x +y + z - last_x - last_y - last_z) / diffTime * 10000;

            if (speed > _shakeCount) {
                callback();
            }
            last_x = x;
            last_y = y;
            last_z = z;
        }
    }
}())